﻿<%@ Page Title="" Language="C#" MasterPageFile="~/Popup.Master" AutoEventWireup="true" CodeBehind="TS_RegisteredOT.aspx.cs" Inherits="vHCS.K2App.MdlK2.TS_RegisteredOT" %>
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>
<%@ Register Assembly="Core.Controls" Namespace="Core.Controls.Message" TagPrefix="msg" %>
<%@ Register Assembly="Core.Controls" Namespace="Core.Controls.Security" TagPrefix="sec" %>
<%@ Register Assembly="Core.Controls" Namespace="Core.Controls.DataReader" TagPrefix="core" %>
<%@ Register Assembly="Core.Controls" Namespace="Core.Controls.Validate" TagPrefix="core" %>
<%@ Register Src="../MdlK2/Controls/TS_ctrEmpHeader_Leave.ascx" TagName="EmpHeader" TagPrefix="uc" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainToolbar" runat="server">
    <asp:Button ID="btnSaveTop" runat="server" Text="Lưu" ValidationGroup="Save" CssClass="btnSave" onclick="btnSave_Click"/>
    <asp:Button ID="btnDeleteTop" runat="server" Text="Xóa" CssClass="btnDelete" OnClientClick="return CheckValidForDelete(this,event);" onclick="btnDelete_Click"/>
    <asp:Button ID="btnSendApproveTop" runat="server" Text="Gửi duyệt"  CssClass="btnSubmit" OnClientClick="return CheckValidForSubmit(this,event);"  OnClick="btnSubmit_Click"/>
    <asp:Button ID="btnSaveSubmitTop" runat="server" Text="Lưu & gửi duyệt"  CssClass="btnSubmit" ValidationGroup="Save"  OnClick="btnSaveSubmit_Click"/>
    <asp:HiddenField ID="hdfuser" runat="server" />
      <msg:messagesetting ID="msgList" runat="server">
        <Items>
            <msg:Message Code="10003"/>  
            <msg:Message Code="10011"/> 
            <msg:Message Code="10026"/> 
            <msg:Message Code="10057"/>   
            <msg:Message Code="10095"/>   
            <msg:Message Code="12326"/>   
            <msg:Message Code="12327"/>   
            <msg:Message Code="10081"/>               
        </Items>
    </msg:messagesetting>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <div class="searchWrapper">
    <uc:EmpHeader ID="ucEmpHeader" runat="server" OnUserChanged="HR_ctrEmpHeader_OnUserChanged"/>
    <div class="div6Column">
        <div class="label">
            <asp:Label ID="Label1" runat="server" Text="Tháng/Năm"></asp:Label>
            <span class="require">(*)</span>
        </div>
        <div class="divAuto">
            <asp:TextBox ID="txtMonth" runat="server" CssClass="inputText" Width="60" MaxLength="7" onkeypress="return new Grid().KeypreessEnter(this, event)"></asp:TextBox>
            <asp:Label ID="lblHLTu" runat="server" CssClass="divNote" Text="(mm/yyyy)"></asp:Label>
            <asp:RequiredFieldValidator CssClass="validation"  runat="server" ID="RqfHLTu" 
                ControlToValidate="txtMonth"
                ErrorMessage="Vui lòng nhập tháng/năm" Display="Dynamic" SetFocusOnError="true" 
                ValidationGroup="Search"></asp:RequiredFieldValidator>
            <asp:CustomValidator ID="valMonthYear" CssClass="validation" runat="server"
                ErrorMessage="Nhập đúng định dạng mm/yyyy và năm >=1900" Display="Dynamic" 
                    ControlToValidate="txtMonth" ValidationGroup="Search"
                ClientValidationFunction="txtMonthYear_Validate" >
            </asp:CustomValidator>                           
        </div>
    </div>
    <div class="divClear"></div>
    <div class="divButton">
        <asp:Button ID="btnSearch" runat="server" Text="Tìm kiếm"  CssClass="btnFind" onclick="btnSearch_Click" ValidationGroup="Search"/>
        <asp:Button ID="btnRefesh" runat="server" Text="Làm mới" CssClass="btnRefresh" onclick="btnRefesh_Click" />
    </div>
</div>
    <div style="display:none">
        <asp:CustomValidator ID="valGrid" runat="server"  ValidationGroup="Search" Display="Dynamic" CssClass="validation"
            ClientValidationFunction="dtgList_Validate"
            ErrorMessage="">
        </asp:CustomValidator>               
                    
        <asp:CustomValidator ID="valGridSave" runat="server"  ValidationGroup="Save" Display="Dynamic" CssClass="validation"
            ClientValidationFunction="dtgList_ValidateSaveGrid"
            ErrorMessage="">
        </asp:CustomValidator>               
    </div>    

    <div class="divClear"></div>   
    <div class="labelNoText">&nbsp;</div>
    <div class="div6Column">
        <span class="require">*</span>
        <asp:Label ID="Label11" runat="server" CssClass="divNote" Text="Bạn phải thực hiện lưu trước khi gửi duyệt"></asp:Label>
    </div>   
    <div class="divClear"></div>                  
    <div style="display:none" id="divValidDateOT">                                 
        <asp:Label ID="Label5" runat="server" CssClass="validation" Text="Vui lòng chọn ngày OT"></asp:Label>
    </div>
    <div style="display:none" id="divValidTimeIn">                                 
        <asp:Label ID="Label6" runat="server" CssClass="validation" Text="Vui lòng nhập giờ vào"></asp:Label>
    </div>
    <div style="display:none" id="divValidTimeOut">                                 
        <asp:Label ID="Label8" runat="server" CssClass="validation" Text="Vui lòng nhập giờ ra"></asp:Label>
    </div>
    <div style="display:none" id="divTimeFormat">                                 
        <asp:Label ID="Label14" runat="server" CssClass="validation" Text="Vui lòng nhập giờ theo định dạng hh:mm"></asp:Label>
    </div>
    <div style="display:none" id="divCheckTimeOut">                                 
        <asp:Label ID="Label2" runat="server" CssClass="validation" Text="Vui lòng nhập giờ vào nhỏ hơn giờ ra"></asp:Label>
    </div>
    <div style="display:none" id="divCheckBreak">                                 
        <asp:Label ID="Label3" runat="server" CssClass="validation" Text="Vui lòng nhập số phút nghỉ giữa ca < 1440 (phút)"></asp:Label>
    </div>   
    <div style="display:none" id="divCheckBreakTotalOT">                                 
        <asp:Label ID="Label4" runat="server" CssClass="validation" Text="Thông tin nghỉ trưa phải nhỏ hơn số giờ làm ngoài giờ"></asp:Label>
    </div>   
    <div style="display:none" id="divComplitShiftOT">                                 
        <asp:Label ID="Label9" runat="server" CssClass="validation" Text="Thông tin ngoài giờ không được trùng với giờ ca làm việc"></asp:Label>
    </div>   
    <div style="display:none" id="divMaxHour">                                 
        <asp:Label ID="Label10" runat="server" CssClass="validation" Text="Vui lòng nhập giờ >=0 và <=24"></asp:Label>
    </div>   
    <div class="divClear"></div>
    <div class="divGrid" style=" overflow-x: scroll; overflow-y: hidden;">
        <telerik:RadGrid ID="dtgList" runat="server" Skin="Web20" Width="120%"  AllowSorting="true"
            AllowMultiRowSelection="True" GridLines="None" AllowFilteringByColumn="false" 
            PageSize="2" Height="300px" DataSourceID="dataList" 
            AutoGenerateColumns="False" AllowPaging="True" OnItemDataBound="dtgList_ItemDataBound">
            <MasterTableView Width="100%">
                <Columns>
                    <telerik:GridBoundColumn DataField="MonthYear" Visible="false"></telerik:GridBoundColumn>
                    <telerik:GridBoundColumn DataField="OverTimeID" Visible="false"></telerik:GridBoundColumn>
                    <telerik:GridBoundColumn DataField="EmpID" Visible="false"></telerik:GridBoundColumn>
                    <telerik:GridBoundColumn DataField="DateID" Visible="false"></telerik:GridBoundColumn>
                    <telerik:GridBoundColumn DataField="ProjectID" Visible="false"></telerik:GridBoundColumn>
                    <telerik:GridBoundColumn DataField="TimeIn" Visible="false"></telerik:GridBoundColumn>
                    <telerik:GridBoundColumn DataField="TimeOut" Visible="false"></telerik:GridBoundColumn>
                    <telerik:GridBoundColumn DataField="NumOfBreak" Visible="false"></telerik:GridBoundColumn>        
                    <telerik:GridBoundColumn DataField="LSShiftID" Visible="false"></telerik:GridBoundColumn>
                    <telerik:GridBoundColumn DataField="TypeDate" Visible="false"></telerik:GridBoundColumn>
                    <telerik:GridBoundColumn DataField="LSScheduleID" Visible="false"></telerik:GridBoundColumn>
                    <telerik:GridBoundColumn DataField="BegWorkTime" Visible="false"></telerik:GridBoundColumn>
                    <telerik:GridBoundColumn DataField="EndWorkTime" Visible="false"></telerik:GridBoundColumn>
                    <telerik:GridBoundColumn DataField="TotalOTHours" Visible="false"></telerik:GridBoundColumn>
                    <telerik:GridBoundColumn DataField="Note" Visible="false"></telerik:GridBoundColumn>
                    <telerik:GridBoundColumn DataField="IsCompensation" Visible="false"></telerik:GridBoundColumn>
                    <telerik:GridBoundColumn DataField="IsUpdate" Visible="false"></telerik:GridBoundColumn>
                    <telerik:GridBoundColumn DataField="StatusID" Visible="false"></telerik:GridBoundColumn>
<%-- Thông tin trên lưới --%>
                <telerik:GridClientSelectColumn HeaderStyle-Width="40" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" UniqueName="ClientSelectColumn" >
                </telerik:GridClientSelectColumn>
                <telerik:GridTemplateColumn HeaderStyle-Width="40"  HeaderText="STT" AllowFiltering="false" ItemStyle-HorizontalAlign="Center">
                    <ItemTemplate>
                        <%# Container.ItemIndex + 1 + dtgList.PageSize * dtgList.CurrentPageIndex%>
                    </ItemTemplate>                   
                </telerik:GridTemplateColumn>
<%-- Thông tin ngày ngoài giờ --%>
                <telerik:GridTemplateColumn HeaderText="Ngày OT" ItemStyle-HorizontalAlign="Center" HeaderStyle-Width="150" AllowFiltering="false" >
                    <ItemTemplate>
                        <div style="display:none">                             
                            <telerik:RadTextBox ID="txtLSShiftID" Text="" runat="server"></telerik:RadTextBox>  
                            <telerik:RadTextBox ID="txtTypeDate" Text="" runat="server"></telerik:RadTextBox>  
                            <telerik:RadTextBox ID="txtLSScheduleID" Text="" runat="server"></telerik:RadTextBox>  
                            <telerik:RadTextBox ID="txtIsCompensation" Text="" runat="server"></telerik:RadTextBox>                              
                            <telerik:RadTextBox ID="txtShiftIn" Text="" runat="server"></telerik:RadTextBox>                              
                            <telerik:RadTextBox ID="txtShiftOut" Text="" runat="server"></telerik:RadTextBox>                              
                        </div>
                        <telerik:RadComboBox ID="cboDateOT" Width="100%" runat="server"  CausesValidation="false" 
                            AllowCustomText="false" EnableItemCaching="true"
                            EnableLoadOnDemand="false" Filter="Contains" MarkFirstMatch="false"
                            OnItemsRequested="RadComboBox_ItemRequested" HighlightTemplatedItems="true" ValidationGroup="None"
                            DataTextField="Id"  DataValueField="Id" DataSourceID="dtsDateOT" OnClientSelectedIndexChanged="cboDateOT_OnClientSelectedIndexChanged" >                                                                              
                        </telerik:RadComboBox>                          
                    </ItemTemplate>
                </telerik:GridTemplateColumn>
<%-- Thông tin ghi chú --%>                               
                <telerik:GridTemplateColumn HeaderText="Lý do làm thêm giờ" AllowFiltering="false" HeaderStyle-Width="240" >
                    <ItemTemplate>
                        <asp:TextBox ID="txtNote" Width="100%" runat="server" CssClass="inputText"></asp:TextBox>
                    </ItemTemplate>
                </telerik:GridTemplateColumn>
<%-- Thông tin giờ vào --%>
                <telerik:GridTemplateColumn HeaderText="Giờ vào(hh:mm)" HeaderStyle-Width="60" AllowFiltering="false" >
                    <ItemTemplate>
                            <telerik:RadTextBox MaxLength="5" ID="txtTimeIn" runat="server"  Width="100%" CssClass="inputText" >
                                    <ClientEvents OnValueChanged="txtTimeIn_OnTextChanged"/>  
                            </telerik:RadTextBox>
                    </ItemTemplate>
                </telerik:GridTemplateColumn>
<%-- Thông tin giờ ra --%>
                <telerik:GridTemplateColumn HeaderText="Giờ ra(hh:mm)" HeaderStyle-Width="60" AllowFiltering="false" >
                    <ItemTemplate>
                         <telerik:RadTextBox MaxLength="5" ID="txtTimeOut" runat="server"  Width="100%" CssClass="inputText" >
                                        <ClientEvents OnValueChanged="txtTimeOut_OnTextChanged"/>  
                          </telerik:RadTextBox>
                    </ItemTemplate>                    
                </telerik:GridTemplateColumn>
<%-- Thông tin nghỉ giữa ca --%>
                <telerik:GridTemplateColumn HeaderText="Nghỉ giữa ca(phút)" HeaderStyle-Width="50" AllowFiltering="false" >
                    <ItemTemplate>
                         <telerik:RadNumericTextBox MaxLength="4" ID="txtMidShift" NumberFormat-DecimalSeparator="," runat="server" Width="100%" CssClass="inputText" NumberFormat-DecimalDigits="0">
                                        <ClientEvents OnValueChanged="txtMidShift_OnTextChanged" />  
                        </telerik:RadNumericTextBox>          
                    </ItemTemplate>
                </telerik:GridTemplateColumn>
<%-- Thông tin tổng giờ đăng ký OT --%>
                <telerik:GridTemplateColumn HeaderText="Tổng giờ đăng ký OT" HeaderStyle-Width="50" AllowFiltering="false" >
                    <ItemTemplate>
                         <telerik:RadNumericTextBox MaxLength="4" ID="txtTotal" Enabled="false" BorderStyle="None" NumberFormat-DecimalSeparator="." runat="server" Width="100%" CssClass="inputText">                                        
                         </telerik:RadNumericTextBox>            
                    </ItemTemplate>                    
                </telerik:GridTemplateColumn>
<%-- Thông tin dự án --%>
                <telerik:GridTemplateColumn HeaderText="Dự án" ItemStyle-HorizontalAlign="Center" HeaderStyle-Width="180" AllowFiltering="false" >
                    <ItemTemplate>                        
                        <telerik:RadComboBox ID="cboProject" runat="server" Width="100%" OnClientSelectedIndexChanged="cboProject_OnClientSelectedIndexChanged"></telerik:RadComboBox>
                    </ItemTemplate>
                </telerik:GridTemplateColumn>                    
<%-- Thông tin nghỉ bù --%>    
                <telerik:GridTemplateColumn HeaderText="Nghỉ bù" HeaderStyle-Width="30" ItemStyle-HorizontalAlign="Center" AllowFiltering="false" >
                    <ItemTemplate>
                        <asp:CheckBox runat="server" ID="chkNghiBu" Enabled="false"/>
                    </ItemTemplate>
                </telerik:GridTemplateColumn>
<%-- Thông tin trạng thái --%>    
                <telerik:GridBoundColumn DataField="StatusName" HeaderText="Trạng thái"  HeaderStyle-Width="80" ItemStyle-HorizontalAlign="Center" AllowFiltering="false" ></telerik:GridBoundColumn>                
                </Columns>                
                <PagerStyle Mode="NextPrevNumericAndAdvanced"  PageButtonCount="5" HorizontalAlign="Left"  Position="Bottom" />
            </MasterTableView>
            <ClientSettings EnableRowHoverStyle="true">
                <Selecting AllowRowSelect="True" />
                <Scrolling AllowScroll="false" UseStaticHeaders="True" SaveScrollPosition="True" FrozenColumnsCount="1">
                </Scrolling>
        </ClientSettings>        
        </telerik:RadGrid>
    </div>    

<%-- load dữ liệu ngoài giờ (trên lưới) --%>
    <core:CoreDataSource ID="dataList"  runat="server" SelectMethod="Search"
            TypeName="vHCS.TS.Business.TS_OverTimeCollection" 
        EnableCaching="False" MaximumRowsParameterName="">
        <SelectParameters>
            <asp:ControlParameter Name="empID" ControlID="hdfempID" PropertyName="Value" Type="Int64" />
            <asp:ControlParameter Name="monthYear"  ControlID="txtMonth"  PropertyName="Text" Type="String" />            
            <asp:Parameter Name="Row" Type="Int32" DefaultValue="0"/>
            <asp:Parameter Name="Status" Type="String" DefaultValue="Search"/>
        </SelectParameters>
    </core:CoreDataSource>
<%-- load thông tin combo ngày OT--%>
    <core:coredatasource ID="dtsDateOT"  runat="server" SelectMethod="GetComboItemDate" 
        TypeName="vHCS.TS.Business.TS_OverTimeCollection" 
        CacheExpirationPolicy="Sliding"
        EnableCaching="true" CacheDuration="120"  MaximumRowsParameterName="">
                <SelectParameters> 
                        <asp:ControlParameter ControlID="hdfempID" Name="empID" PropertyName="Value" Type="Int64"/>
                        <asp:ControlParameter ControlID="txtMonth" Name="dateInput" PropertyName="Text" Type="String"/>
                        <asp:Parameter Name="addNullItem" DefaultValue="true" Type="Boolean" />
                </SelectParameters>
    </core:coredatasource> 
    <div class="divClear"></div>          
    <div class="divButton">
        <asp:Button ID="btnAddRow" runat="server"  Text="Thêm dòng"  CssClass="btnAddNew" onclick="AddRow_Click" ValidationGroup="Search"/> 
    </div>
    <div class="divClear"></div>          
    <div class="formTitle">
        <div class="formToolbar">
            <asp:Button ID="btnSaveBot" runat="server" Text="Lưu" ValidationGroup="Save"  CssClass="btnSave" onclick="btnSave_Click"/>
            <asp:Button ID="btnDeleteBot" runat="server" Text="Xóa" CssClass="btnDelete" OnClientClick="return CheckValidForDelete(this,event);" onclick="btnDelete_Click"/>
            <asp:Button ID="btnSendApproveBot" runat="server" Text="Gửi duyệt"  CssClass="btnSubmit" OnClientClick="return CheckValidForSubmit(this,event);"  OnClick="btnSubmit_Click"/>
            <asp:Button ID="btnSaveSubmitBot" runat="server" Text="Lưu & gửi duyệt"  CssClass="btnSubmit" ValidationGroup="Save"  OnClick="btnSaveSubmit_Click"/>
        </div>
    </div>
    <asp:HiddenField ID="hdfempID" runat="server" />
    <asp:HiddenField ID="hdCount" Value="0" runat="server" />
    <asp:HiddenField ID="hdText" Value="" runat="server" />
    <asp:HiddenField ID="hdBreakOT" Value="" runat="server" />
    <asp:HiddenField ID="hdfIsSave" Value="" runat="server" />

<telerik:RadAjaxManagerProxy ID="ajaxManager" runat="server">       
</telerik:RadAjaxManagerProxy>
<telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1"  runat="server">
</telerik:RadAjaxLoadingPanel>
<telerik:RadCodeBlock  ID="RadCodeBlock1" runat="server"> 
<script type="text/javascript">

    // ---------------- chọn nhân viên khi tìm kiếm
    function dtgList_Validate(source, args) {
        var hdfempID = document.getElementById('<%= hdfempID.ClientID %>');
        var txtMonth = document.getElementById('<%= txtMonth.ClientID %>');
        if ((hdfempID.value == "" || hdfempID.value == "0") && txtMonth.value != "") {
            new Message().ShowObject(alertmsg_10095);
            args.IsValid = false;
            return false;
        }
        args.IsValid = true;
        return true;
    }

    // ----------------- hàm dùng chung bắt buộc chọn dòng trước khi thao tác
    function CheckSelectForGrid(sender, event, alertmsg1, alertmsg2){
        //Kiểm tra đã chọn dòng cần xóa?
        if (new Grid().CheckRowSelectedPemission("<%= dtgList.MasterTableView.ClientID %>") == false) {
            new Message().ShowObject(alertmsg1);
            return false;
        }

        //Xác nhân thao tác
        return vHCSConfirmObject(alertmsg2, event, 330, 100, '');        
    }

    // ---------------- kiểm tra check chọn dòng trước khi xóa
    function CheckValidForDelete(sender, event) {
        return CheckSelectForGrid(sender, event, alertmsg_10003, alertmsg_10011);
    }

    // ---------------- kiểm tra check chọn dòng trước khi gửi duyệt
    function CheckValidForSubmit(sender, event) {
        return CheckSelectForGrid(sender, event, alertmsg_12326, alertmsg_12327);        
    }

     // ---------------- bắt buộc nhập tháng/năm khi save
    function dtgList_ValidateSaveObj(source, args) {
        MonthYearValidate(source, args, "<%=txtMonth.ClientID%>");
    }

    // ----------------- kiểm tra check chọn dòng trước khi lưu & validate các dòng trên lưới
    function dtgList_ValidateSaveGrid(source, args) {  
        var grid = document.getElementById("<%= dtgList.MasterTableView.ClientID %>");
        var startItemRow = 4;
        var lblValid = "";
        var Flag = 0;
        var CheckFlag = -1; 
        if (grid.rows.length > 0) {
            //duyệt qua tất cả các dòng của grid
            for (i = 0; i < grid.rows.length; i++) {
                var rowIndex = startItemRow + (i * 2);
                var ctlIndex = null;
                if (rowIndex < 10) ctlIndex = '0' + rowIndex.toString();
                else ctlIndex = rowIndex.toString();
                //Gán giá trị từ Header vào combo trên lưới (những dòng được check chọn)
                if (document.getElementById('ctl00_MainContent_dtgList_ctl00_ctl' + ctlIndex + '_ClientSelectColumnSelectCheckBox') != null) {
                    if (document.getElementById('ctl00_MainContent_dtgList_ctl00_ctl' + ctlIndex + '_ClientSelectColumnSelectCheckBox').checked == true) {
                        CheckFlag = 1;
                        // ngày OT
                        var idDateOT = 'ctl00_MainContent_dtgList_ctl00_ctl' + ctlIndex + '_cboDateOT';

                        // id giờ bắt đầu ca
                        var idShiftIn = 'ctl00_MainContent_dtgList_ctl00_ctl' + ctlIndex + '_txtShiftIn';

                        // id giờ kết thúc ca
                        var idShiftOut = 'ctl00_MainContent_dtgList_ctl00_ctl' + ctlIndex + '_txtShiftOut';

                        // id giờ vào
                        var idTimeIn = 'ctl00_MainContent_dtgList_ctl00_ctl' + ctlIndex + '_txtTimeIn';

                        // id giờ ra
                        var idTimeOut = 'ctl00_MainContent_dtgList_ctl00_ctl' + ctlIndex + '_txtTimeOut';

                        // id nghỉ giữa ca
                        var idMidShift = 'ctl00_MainContent_dtgList_ctl00_ctl' + ctlIndex + '_txtMidShift';

                        // id tổng giờ 
                        var idTotal = 'ctl00_MainContent_dtgList_ctl00_ctl' + ctlIndex + '_txtTotal';

                        checkValidateInfo(idShiftIn, idShiftOut, idDateOT, idTimeIn, idMidShift, idTimeOut, idTotal, args);

                        if (args.IsValid == false) {
                            return false;
                        }
                    }
                }
            }

        }
        if (CheckFlag == -1) {
            new Message().ShowObject(alertmsg_10081);
            args.IsValid = false;
            return false;
        }
    }

    //--------------- check định dạng tháng/năm --------------------
    function txtMonthYear_Validate(source, args) {
        MonthYearValidate(source, args, "<%=txtMonth.ClientID%>");
    }

    function MonthYearValidate(source, args, object) {
        var obj = document.getElementById(object);  
        var result = new MonthYearChecker().CheckMonthYear(obj);           
        if (result == false || result == null || result == "") {            
            args.IsValid = false;
            return false;
        }
        args.IsValid = true;
        return true;
    }

    // ----------------- xử lý check chọn tự động
    function checkAuto(objSelected, objName) {
        var strIDCheck = objSelected.replace(objName, 'ClientSelectColumnSelectCheckBox');
        if ( document.getElementById(strIDCheck) != null )
            document.getElementById(strIDCheck).checked = true;
    }

    // ----------------- xử lý thay đổi ngày OT 
    function cboDateOT_OnClientSelectedIndexChanged(sender, args) {
        checkAuto(sender.get_id(), 'cboDateOT');

        // load thông tin dự án  
        var idDateOT = sender.get_id();       
        var valueDateOT = $find(sender.get_id()).get_value();
        var cboProjectId = $find(sender.get_id().replace("cboDateOT", "cboProject"));

        var idHourIn = sender.get_id().replace('cboDateOT', 'txtTimeIn');
        var idHourShift = sender.get_id().replace('cboDateOT', 'txtMidShift');
        var idHourOut = sender.get_id().replace('cboDateOT', 'txtTimeOut');                  
        var idSumHour = sender.get_id().replace('cboDateOT', 'txtTotal');
        var idShiftIn = sender.get_id().replace('cboDateOT', 'txtShiftIn');
        var idShiftOut = sender.get_id().replace('cboDateOT', 'txtShiftOut');
        

        // load thêm thông tin liên quan khác
        var txtLSShiftID = $find(sender.get_id().replace("cboDateOT", "txtLSShiftID")); // loại ca
        var txtTypeDate = $find(sender.get_id().replace("cboDateOT", "txtTypeDate")); // loại ngày
        var txtLSScheduleID = $find(sender.get_id().replace("cboDateOT", "txtLSScheduleID")); // lịch làm việc
        var txtShiftIn = $find(sender.get_id().replace("cboDateOT", "txtShiftIn")); // ca làm việc giờ vào
        var txtShiftOut = $find(sender.get_id().replace("cboDateOT", "txtShiftOut")); // ca làm việc giờ ra
        
        // clear các item trong combo trước khi add lại
        cboProjectId.set_value("");
        cboProjectId.set_text("");
        cboProjectId.get_items().clear();
        
        var valueDateProject = "";        
        <% for(int i=0; i<dtListProject.Rows.Count; i++) {%>	              
               valueDateProject = "<%=dtListProject.Rows[i]["DateID"]%>";                              
			   if (valueDateOT == valueDateProject.replace(" 00:00:00", "")) {
                    var comboItem = new Telerik.Web.UI.RadComboBoxItem();
                    comboItem.set_text("<%=dtListProject.Rows[i]["ProjectName"]%>");
                    comboItem.set_value("<%=dtListProject.Rows[i]["ProjectID"]%>");

                    cboProjectId.trackChanges();
                    cboProjectId.get_items().add(comboItem);
                    cboProjectId.commitChanges();

                    // load các thông tin liên quan khác
                    txtLSShiftID.set_value("<%=dtListProject.Rows[i]["LSShiftID"]%>");                    
                    txtTypeDate.set_value("<%=dtListProject.Rows[i]["TypeDate"]%>");                    
                    txtLSScheduleID.set_value("<%=dtListProject.Rows[i]["LSScheduleID"]%>");      
                    txtShiftIn.set_value("<%=dtListProject.Rows[i]["BegWorkTime"]%>");      
                    txtShiftOut.set_value("<%=dtListProject.Rows[i]["EndWorkTime"]%>");     

                                  
                    if ("<%=dtListProject.Rows[i]["IsCompensation"]%>" == "1") // nếu ngày OT đang thuộc cấp bậc có nghỉ bù thì check chọn nghỉ bù
                        document.getElementById(sender.get_id().replace("cboDateOT", "chkNghiBu")).checked = true;
                    else 
                        document.getElementById(sender.get_id().replace("cboDateOT", "chkNghiBu")).checked = false;
               }
	    <%}%>

        checkValidateInfo(idShiftIn, idShiftOut, idDateOT, idHourIn, idHourShift, idHourOut, idSumHour, args); // check các validate trên lưới
    }

    function cboProject_OnClientSelectedIndexChanged(sender, args) {
        checkAuto(sender.get_id(), 'cboProject');
    }

     // sự kiện nhập giờ vào
    function txtTimeIn_OnTextChanged(sender, arg) {         
         checkAuto(sender.get_id(), 'txtTimeIn');
         var idHourIn = sender.get_id();
         var idHourShift = sender.get_id().replace('txtTimeIn', 'txtMidShift');
         var idHourOut = sender.get_id().replace('txtTimeIn', 'txtTimeOut');                  
         var idSumHour = sender.get_id().replace('txtTimeIn', 'txtTotal');                  
         var idDateOT = sender.get_id().replace('txtTimeIn', 'cboDateOT');
         var idShiftIn = sender.get_id().replace('txtTimeIn', 'txtShiftIn');
         var idShiftOut = sender.get_id().replace('txtTimeIn', 'txtShiftOut');
         checkValidateInfo(idShiftIn, idShiftOut, idDateOT, idHourIn, idHourShift, idHourOut, idSumHour, arg); // check các validate trên lưới
         CalculateSumHour(idHourIn, idHourShift, idHourOut, idSumHour);
    }

    // sự kiện nhập giờ ra
    function txtTimeOut_OnTextChanged(sender, arg) {
        checkAuto(sender.get_id(), 'txtTimeOut');
        var idHourOut = sender.get_id();
        var idHourShift = sender.get_id().replace('txtTimeOut', 'txtMidShift');
        var idHourIn = sender.get_id().replace('txtTimeOut', 'txtTimeIn');
        var idSumHour = sender.get_id().replace('txtTimeOut', 'txtTotal');
        var idDateOT = sender.get_id().replace('txtTimeOut', 'cboDateOT');
        var idShiftIn = sender.get_id().replace('txtTimeOut', 'txtShiftIn');
        var idShiftOut = sender.get_id().replace('txtTimeOut', 'txtShiftOut');
        checkValidateInfo(idShiftIn, idShiftOut, idDateOT, idHourIn, idHourShift, idHourOut, idSumHour, arg); // check các validate trên lưới
        CalculateSumHour(idHourIn, idHourShift, idHourOut, idSumHour);
    }

    // sự kiện nhập giờ nghỉ trưa
    function txtMidShift_OnTextChanged(sender, arg) {        
        checkAuto(sender.get_id(), 'txtMidShift');
        var idHourShift = sender.get_id();
        var idHourOut = sender.get_id().replace('txtMidShift', 'txtTimeOut');
        var idHourIn = sender.get_id().replace('txtMidShift', 'txtTimeIn');        
        var idSumHour = sender.get_id().replace('txtMidShift', 'txtTotal');
        var idDateOT = sender.get_id().replace('txtMidShift', 'cboDateOT');
        var idShiftIn = sender.get_id().replace('txtMidShift', 'txtShiftIn');
        var idShiftOut = sender.get_id().replace('txtMidShift', 'txtShiftOut');
        checkValidateInfo(idShiftIn, idShiftOut, idDateOT, idHourIn, idHourShift, idHourOut, idSumHour, arg); // check các validate trên lưới
        CalculateSumHour(idHourIn, idHourShift, idHourOut, idSumHour);
    }

    // check các validate trên lưới
    function checkValidateInfo(idShiftIn, idShiftOut, idDateOT, idHourIn, idHourShift, idHourOut, idSumHour, args){
        // Lấy thông tin ngày OT
        var cboDateOT = $find(idDateOT);
        var valueDateOT = cboDateOT.get_value();
        
        // Lấy thời gian giờ vào ca làm việc
        var txtShiftIn = $find(idShiftIn);
        var valueShiftIn = txtShiftIn.get_value();                     

        // Lấy thời gian giờ ra ca làm việc
        var txtShiftOut = $find(idShiftOut);
        var valueShiftOut = txtShiftOut.get_value();             

        // Lấy thời gian giờ vào
        var txtHourIn = $find(idHourIn);
        var valueHourIn = txtHourIn.get_value();
        if (valueHourIn.length == 4) // lúc này value = 1730, thiếu dấu : , ko quy đổi sẽ bị sai                        
        {
            valueHourIn = valueHourIn.substr(0, 2) + ":" + valueHourIn.substr(2, 2);
        }

        // Lấy thời gian giờ nghỉ trưa
        var txtHourShift = $find(idHourShift);        
        var valueHourShift = txtHourShift.get_value();

        // Lấy thời gian giờ ra
        var txtHourOut = $find(idHourOut);
        var valueHourOut = txtHourOut.get_value();
        if (valueHourOut.length == 4) // lúc này value = 1730, thiếu dấu : , ko quy đổi sẽ bị sai                        
        {
            valueHourOut = valueHourOut.substr(0, 2) + ":" + valueHourOut.substr(2, 2);
        }

        // Lấy thời gian tổng giờ
        var txtSumHour = $find(idSumHour);
        var valueSumHour = txtSumHour.get_value();

        if (valueDateOT == ""){ // bắt buộc nhập ngày OT            
            document.getElementById("divValidTimeIn").style.display = "none";
            document.getElementById("divValidTimeOut").style.display = "none";
            document.getElementById("divTimeFormat").style.display = "none";
            document.getElementById("divCheckTimeOut").style.display = "none";
            document.getElementById("divCheckBreak").style.display = "none";
            document.getElementById("divCheckBreakTotalOT").style.display = "none";
            document.getElementById("divValidDateOT").style.display = "";
            document.getElementById("divComplitShiftOT").style.display = "none";
            document.getElementById("divMaxHour").style.display = "none";
            //cboDateOT.focus();           
            args.IsValid = false;
            return false;   
        }

        else if (valueHourIn == ""){ // bắt buộc nhập giờ vào
            document.getElementById("divValidTimeIn").style.display = "";
            document.getElementById("divValidTimeOut").style.display = "none";
            document.getElementById("divTimeFormat").style.display = "none";
            document.getElementById("divCheckTimeOut").style.display = "none";
            document.getElementById("divCheckBreak").style.display = "none";
            document.getElementById("divCheckBreakTotalOT").style.display = "none";
            document.getElementById("divValidDateOT").style.display = "none";
            document.getElementById("divComplitShiftOT").style.display = "none";
            document.getElementById("divMaxHour").style.display = "none";
            txtHourIn.focus();
            args.IsValid = false;
            return false;
        }

        else if (new TimeChecker().CheckTime(idHourIn) == 0)  { // nhập đúng định dạng
            document.getElementById("divValidTimeIn").style.display = "none";
            document.getElementById("divValidTimeOut").style.display = "none";
            document.getElementById("divTimeFormat").style.display = "";
            document.getElementById("divCheckTimeOut").style.display = "none";
            document.getElementById("divCheckBreak").style.display = "none";
            document.getElementById("divCheckBreakTotalOT").style.display = "none";
            document.getElementById("divValidDateOT").style.display = "none";
            document.getElementById("divComplitShiftOT").style.display = "none";
            document.getElementById("divMaxHour").style.display = "none";
            txtHourIn.focus();
            args.IsValid = false;
            return false;
        }

        else if (new TimeChecker().CheckTime(idHourIn) == -1)  { // < 0 và > 24 -> sai
            document.getElementById("divValidTimeIn").style.display = "none";
            document.getElementById("divValidTimeOut").style.display = "none";
            document.getElementById("divTimeFormat").style.display = "none";
            document.getElementById("divCheckTimeOut").style.display = "none";
            document.getElementById("divCheckBreak").style.display = "none";
            document.getElementById("divCheckBreakTotalOT").style.display = "none";
            document.getElementById("divValidDateOT").style.display = "none";
            document.getElementById("divComplitShiftOT").style.display = "none";
            document.getElementById("divMaxHour").style.display = "";
            txtHourIn.focus();
            args.IsValid = false;
            return false;
        }

        else if (valueHourOut == ""){ // bắt buộc nhập giờ ra
            document.getElementById("divValidTimeIn").style.display = "none";
            document.getElementById("divValidTimeOut").style.display = "";
            document.getElementById("divTimeFormat").style.display = "none";
            document.getElementById("divCheckTimeOut").style.display = "none";
            document.getElementById("divCheckBreak").style.display = "none";
            document.getElementById("divCheckBreakTotalOT").style.display = "none";
            document.getElementById("divValidDateOT").style.display = "none";
            document.getElementById("divComplitShiftOT").style.display = "none";
            document.getElementById("divMaxHour").style.display = "none";
            txtHourOut.focus();
            args.IsValid = false;
            return false;
        }        
        else if (new TimeChecker().CheckTime(idHourOut) == 0)  { // nhập đúng định dạng
            document.getElementById("divValidTimeIn").style.display = "none";
            document.getElementById("divValidTimeOut").style.display = "none";
            document.getElementById("divTimeFormat").style.display = "";
            document.getElementById("divCheckTimeOut").style.display = "none";
            document.getElementById("divCheckBreak").style.display = "none";
            document.getElementById("divCheckBreakTotalOT").style.display = "none";
            document.getElementById("divValidDateOT").style.display = "none";
            document.getElementById("divComplitShiftOT").style.display = "none";
            document.getElementById("divMaxHour").style.display = "none";
            txtHourOut.focus();
            args.IsValid = false;
            return false;
        }

        else if (new TimeChecker().CheckTime(idHourOut) == -1)  { // < 0 và > 24 -> sai
            document.getElementById("divValidTimeIn").style.display = "none";
            document.getElementById("divValidTimeOut").style.display = "none";
            document.getElementById("divTimeFormat").style.display = "none";
            document.getElementById("divCheckTimeOut").style.display = "none";
            document.getElementById("divCheckBreak").style.display = "none";
            document.getElementById("divCheckBreakTotalOT").style.display = "none";
            document.getElementById("divValidDateOT").style.display = "none";
            document.getElementById("divComplitShiftOT").style.display = "none";
            document.getElementById("divMaxHour").style.display = "";
            txtHourOut.focus();
            args.IsValid = false;
            return false;
        }

        else if (valueHourIn != "" && valueHourOut != "" && new TimeChecker().TimeInLessThanEqualTimeOut(valueHourIn, valueHourOut) == false)  { // giờ vào < giờ ra
            document.getElementById("divValidTimeIn").style.display = "none";
            document.getElementById("divValidTimeOut").style.display = "none";
            document.getElementById("divTimeFormat").style.display = "none";
            document.getElementById("divCheckTimeOut").style.display = "";
            document.getElementById("divCheckBreak").style.display = "none";
            document.getElementById("divCheckBreakTotalOT").style.display = "none";
            document.getElementById("divValidDateOT").style.display = "none";
            document.getElementById("divComplitShiftOT").style.display = "none";
            document.getElementById("divMaxHour").style.display = "none";
            txtHourIn.focus();
            args.IsValid = false;
            return false;
        }
        else if (new TimeChecker().CheckMinute(idHourShift) == false)  { // số phút nghỉ trưa (<1440 phút)
            document.getElementById("divValidTimeIn").style.display = "none";
            document.getElementById("divValidTimeOut").style.display = "none";
            document.getElementById("divTimeFormat").style.display = "none";
            document.getElementById("divCheckTimeOut").style.display = "none";
            document.getElementById("divCheckBreak").style.display = "";
            document.getElementById("divCheckBreakTotalOT").style.display = "none";
            document.getElementById("divValidDateOT").style.display = "none";
            document.getElementById("divComplitShiftOT").style.display = "none";
            document.getElementById("divMaxHour").style.display = "none";
            txtHourShift.focus();
            args.IsValid = false;
            return false;
        }
        else if (valueHourIn != "" && valueHourOut != "" && valueShiftIn != "" && valueShiftOut != "" 
            && ( (new TimeChecker().TimeInLessThanEqualTimeOut(valueShiftIn, valueHourIn) == true && new TimeChecker().TimeInLessThanEqualTimeOut(valueShiftOut, valueHourIn) == false)
                || (new TimeChecker().TimeInLessThanEqualTimeOut(valueHourIn, valueShiftIn) == true && new TimeChecker().TimeInLessThanEqualTimeOut(valueHourOut, valueShiftIn) == false) )
            )  { // giờ OT ko được đan xen giờ làm việc 
            document.getElementById("divValidTimeIn").style.display = "none";
            document.getElementById("divValidTimeOut").style.display = "none";
            document.getElementById("divTimeFormat").style.display = "none";
            document.getElementById("divCheckTimeOut").style.display = "none";
            document.getElementById("divCheckBreak").style.display = "none";
            document.getElementById("divCheckBreakTotalOT").style.display = "none";
            document.getElementById("divValidDateOT").style.display = "none";
            document.getElementById("divComplitShiftOT").style.display = "";
            document.getElementById("divMaxHour").style.display = "none";
            txtHourIn.focus();
            args.IsValid = false;
            return false;
        }

        else { 
            //var ValueSum = parseInt(GetMinuteFromHour(valueHourOut, valueHourIn)) - parseInt(valueHourShift);
            var ValueSum = parseInt(GetMinuteFromHour(valueHourOut, valueHourIn));
            if (parseFloat(valueHourShift) >= parseFloat(ValueSum)){ // số phút nghỉ trưa phải nhỏ hơn số giờ làm OT
                document.getElementById("divValidTimeIn").style.display = "none";
                document.getElementById("divValidTimeOut").style.display = "none";
                document.getElementById("divTimeFormat").style.display = "none";
                document.getElementById("divCheckTimeOut").style.display = "none";
                document.getElementById("divCheckBreak").style.display = "none";
                document.getElementById("divCheckBreakTotalOT").style.display = "";
                document.getElementById("divValidDateOT").style.display = "none";
                document.getElementById("divComplitShiftOT").style.display = "none";
                document.getElementById("divMaxHour").style.display = "none";
                txtHourShift.focus();
                args.IsValid = false;
                return false;
            }

            else {
                document.getElementById("divValidTimeIn").style.display = "none";
                document.getElementById("divValidTimeOut").style.display = "none";
                document.getElementById("divTimeFormat").style.display = "none";
                document.getElementById("divCheckTimeOut").style.display = "none";
                document.getElementById("divCheckBreak").style.display = "none";
                document.getElementById("divCheckBreakTotalOT").style.display = "none";
                document.getElementById("divValidDateOT").style.display = "none";
                document.getElementById("divComplitShiftOT").style.display = "none";
                document.getElementById("divMaxHour").style.display = "none";
            }
        }
     }

    //  tính tổng số giờ đăng ký OT từ giờ vào, giờ ra, nghỉ giữa ca
    function CalculateSumHour(idHourIn, idHourShift, idHourOut, idSumHour){    
        // Lấy thời gian giờ vào
        var txtHourIn = $find(idHourIn);
        var valueHourIn = txtHourIn.get_value();

        // Lấy thời gian giờ nghỉ trưa
        var txtHourShift = $find(idHourShift);        
        var valueHourShift = txtHourShift.get_value();
        var valueHourShiftPre = valueHourShift;
        if (valueHourShift == "")   valueHourShift = "0";

        // Lấy thời gian giờ ra
        var txtHourOut = $find(idHourOut);
        var valueHourOut = txtHourOut.get_value();

        // Lấy thời gian tổng giờ
        var txtSumHour = $find(idSumHour);

        // Tính tổng số giờ.
        var ValueSum = parseInt(GetMinuteFromHour(valueHourOut, valueHourIn)) - parseInt(valueHourShift);
        if (ValueSum.toString().substr(0, 2) < 0)
            ValueSum = 0;
        if (valueHourIn != null && valueHourOut != null && valueHourShift != null){
            var sumHour = lamtron((parseFloat(ValueSum) / 60).toString(), 3);
            txtSumHour.set_value(sumHour);            
            if (parseFloat(sumHour) >= 8 && valueHourShiftPre == "") // nếu số giờ OT >= 8h thì setup default số giờ nghỉ trưa = 1h
                txtHourShift.set_value("60");   
        }
    }

    // Đổi từ giờ ra phút và trả về hour1-hour2
    function GetMinuteFromHour(hour1, hour2) {

        var temp11 = parseInt((hour1.toString().substr(0, 2) * 60));
        var temp12 = hour1.toString().substr(3, 2);
       /* if (temp12.substr(0, 1) == "0")
            temp12 = temp12.toString().substr(1, 1);*/
        var value1 = temp11 + parseInt(temp12);

        var temp21 = parseInt((hour2.toString().substr(0, 2) * 60));
        var temp22 = hour2.toString().substr(3, 2);
       /* if (temp22.substr(0, 1) == "0")
            temp22 = temp22.substr(1, 1);*/
        var value2 = temp21 + parseInt(temp22);
        return parseInt(value1) - parseInt(value2);
    }

    // Lam tron so thap phan
    function lamtron(str, count) {
        var index = str.indexOf(".");
        if (index != -1) {
            return str.substring(0, index + count);
        }
        return str;
    }

    function ClosePage() {
                var win = new WindowManager().GetRadWindow();
                win.close();
            }

    function LoadMaximize() {
        try {
            var win = new WindowManager().GetRadWindow();
            if (win != null) {
                win.maximize();
            }
        }
        catch (err) {
        }
    }
</script>
</telerik:RadCodeBlock>
</asp:Content>
